﻿using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading;
using System.Xml.Linq;
using Microsoft.SharePoint;
using System.Text.RegularExpressions;

namespace LizardSoft.Common.FlexibleStructureDeployment
{
    public static partial class StructureHelper
    {
        private static void AddNeededContentTypes(SPWeb web, ListProcessingInfo listProcessingInfo)
        {
            SPList list = GetSPListFromFolderUrl(web, listProcessingInfo.ListFolderUrl);
            SPContentTypeCollection siteContentTypes = web.Site.RootWeb.ContentTypes;
            foreach (SPContentTypeId siteContentTypeId in listProcessingInfo.SiteContentTypeIds)
            {
                try
                {
                    SPContentType siteContentType = siteContentTypes[siteContentTypeId];
                    if (siteContentType == null)
                    {
                        throw new Exception("Тип контента уровня сайта не найден");
                    }
                    SPContentTypeCollection listContentTypes = list.ContentTypes;
                    // определяем наиболее подходящий тип контента списка
                    SPContentTypeId bestMatchedId = listContentTypes.BestMatch(siteContentTypeId);
                    SPContentType listContentType = listContentTypes[bestMatchedId];
                    if (listContentType.Parent.Id != siteContentTypeId)
                    {
                        // тип конента еще не добавлялся ранее; необходимо добавить
                        listContentTypes.Add(siteContentType);
                    }
                }
                catch (Exception ex)
                {
                    string message = String.Format(
                        "Ошибка в методе AddNeededContentTypes для списка {0} и типа контента {1}: {2}",
                        listProcessingInfo.ListFolderUrl,
                        siteContentTypeId.ToString(),
                        ex.Message);
                    throw new Exception(message, ex);
                }
            }
        }
    }
}
